package com.block.risk.service.type.item;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.block.risk.model.result.RiskJudgeResult;
import com.block.risk.service.IDefaultItemService;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;

@Service
public class BenLeiItemService implements IDefaultItemService {


    private List<String> valueListSelf = Arrays.asList("0", "(0,500)", "[500,1000)", "[1000,2000)");

    @Override
    public RiskJudgeResult getControlResult(JSONObject resultDetial) {

        /**
         * 芝麻分650+年龄25-45屏蔽连云港，贵州省  江西上饶，
         *
         * 非白，
         * 还款80%，
         * 近一个月履约最少一笔 扣款失败笔数＜扣款成功笔数，
         * 三个月0逾期，
         * 一个月贷款笔数最少2笔。
//         * 一个月贷款金额大于2000
         *
         */
        /**
         * 芝麻分650+年龄25-45屏蔽连云港，贵州省 江西上饶 江苏盐城，
         *
         * 非白，
         * 还款80%，
         * 近一个月有履约
         * 扣款失败笔数< 扣款成功笔数，
         * 一个月0逾期，
         * 一个月内有贷款。
         */
        /**
         * 芝麻分650+年龄25-45屏蔽连云港，贵州省  江西上饶，
         *
         * 非白，
         * 还款80%，
         * 近一个月履约最少一笔
         * 扣款失败笔数＜扣款成功笔数，
         * 三个月0逾期，
         * 一个月贷款笔数最少2笔。
         * 一个月贷款金额大于2000
         */

        RiskJudgeResult riskJudgeResult = new RiskJudgeResult();
        riskJudgeResult.setPass(false);

        JSONObject currentReportDetail = resultDetial.getJSONObject("current_report_detail");
        JSONObject behaviorReportDetail = resultDetial.getJSONObject("behavior_report_detail");
        JSONObject applyReportDetail = resultDetial.getJSONObject("apply_report_detail");

        if (ObjectUtil.isEmpty(behaviorReportDetail)){
            riskJudgeResult.setResult("行为数据结果为空；【behavior_report_detail】");
            return riskJudgeResult;
        }

        // 订单比例90以上
        // 正常还款订单数占贷款总订单数比例
        String numberRate = behaviorReportDetail.getString("B22170034");
        numberRate = numberRate.replace("%", "");
        if (Integer.valueOf(numberRate) < 80){
            riskJudgeResult.setResult(StrUtil.format("订单比例80以上不通过；【{}】", numberRate));
            return riskJudgeResult;
        }

        // B22170045 近1 个月履约贷 款次数
        String repayNumber = behaviorReportDetail.getString("B22170045");
        if (Integer.valueOf(repayNumber) < 1){
            riskJudgeResult.setResult(StrUtil.format("近1 个月履约贷 款次数1笔以上不通过；【{}】", repayNumber));
            return riskJudgeResult;
        }


        // 近6个月逾期M0 = 0
        String numberSixM0 = behaviorReportDetail.getString("B22170025");
        if (Integer.valueOf(numberSixM0) > 0){
            riskJudgeResult.setResult(StrUtil.format("近6个月逾期M0不通过；【{}】", numberSixM0));
            return riskJudgeResult;
        }

        // 扣款失败笔数＜扣款成功笔数，
        String numberSuccess = behaviorReportDetail.getString("B22170045");
        String numberFailed = behaviorReportDetail.getString("B22170035");
        if (Integer.valueOf(numberFailed) >= Integer.valueOf(numberSuccess)){
            riskJudgeResult.setResult(StrUtil.format("成功扣款笔数大于失败笔数不通过；成功扣款笔数【{}】失败笔数【{}】", numberSuccess, numberFailed ));
            return riskJudgeResult;
        }

        // B22170002 近 1个月贷款笔数
        String loanNumber = behaviorReportDetail.getString("B22170002");
        if (Integer.valueOf(loanNumber) < 2){
            riskJudgeResult.setResult(StrUtil.format("近 1个月贷款笔数1笔以上不通过；【{}】", loanNumber));
            return riskJudgeResult;
        }

        // B22170040 近1 个月履约贷款总金额
        String repayAmount = behaviorReportDetail.getString("B22170040");
        if (valueListSelf.contains(repayAmount)){
            riskJudgeResult.setResult(StrUtil.format("一个月还款款金额>2000不通过；【{}】", repayAmount));
            return riskJudgeResult;
        }


        // B22170040 近1 个月履约贷款总金额
//        String repayAmount = behaviorReportDetail.getString("B22170040");
//        if (valueListSelf.contains(repayAmount)){
//            riskJudgeResult.setResult(StrUtil.format("一个月还款款金额>2000不通过；【{}】", repayAmount));
//            return riskJudgeResult;
//        }


        riskJudgeResult.setPass(true);
        riskJudgeResult.setResult("全景分控通过");
        return riskJudgeResult;
    }
}
